﻿#pragma once
#include "MySqlApi.h"
// #include <boost/thread/mutex.hpp>
#include <list>
#include <vector>
#include <thread>
#include <mutex>
using namespace std;

class CMySqlConnectPool
{
private:
    int curSize; // 当前已建立的数据库连接数量
    int maxSize; // 连接池中定义的最大数据库连接数
    string username;
    string password;
    string url;
    list<MySqlApi *> connList; // 连接池的容器队列

    MySqlApi *CreateConnection();			// 创建一个连接
    void DestoryConnection(MySqlApi *conn); // 销毁数据库连接对象
    void DestoryConnPool();					// 销毁数据库连接池

public:
    static CMySqlConnectPool *Instance();
    void InitConnection(int iInitialSize);	// 初始化数据库连接池
    MySqlApi *GetConnection();				// 获得数据库连接
    void ReleaseConnection(MySqlApi *conn); // 将数据库连接放回到连接池的容器中

private:
    // typedef boost::mutex::scoped_lock ScopedLock;
    // boost::mutex m_tcpMutex;

    typedef std::unique_lock<std::mutex> ScopedLock;
    std::mutex m_tcpMutex;


    CMySqlConnectPool(void);

public:
    ~CMySqlConnectPool(void);
};
